iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Modern Web

自己開發一個~?系列 第 3 篇

又是解釋程式碼

  • 分享至 

  • xImage
  •  

就是解釋JAVA程式碼~
/images/emoticon/emoticon04.gif

今天去參加一年一次"和風文化祭"
其實如果在日本的人也是可以去參加日本有關程式的活動~
連結如下~

https://engineercafe.connpass.com/event/296746/?utm_campaign=&utm_source=notifications&utm_medium=email&utm_content=title_link

回到正題~
今天要解釋的程式碼如下~是有包含兩個程式碼才可以跑出來
就是有父類跟子類

父類
程式碼

package Extends;

public class Master {
	//參數以父類為主,可傳入父或子類物件
	void feed(Animal a, Food f) {
		//instanceof:比對物件的類型
		if(a instanceof Animal) {			
			a.eat();
			new Food().showName();
		}
		else if(a instanceof Dog) {			
			a.eat();
			new Bone().showName();
		}else if(a instanceof Cat) {			
			a.eat();
			new Fish().showName();
		}
	}
}
//-----------------------------------
class Animal {
	int a = 100;
	void cry() {
		System.out.println("動物不會叫");
	}
	void eat() {
		System.out.println("動物吃肉");
	}
}

class Dog extends Animal {
	int a = 999;
	void cry() {
		System.out.println("狗狗汪汪叫");
	}
	void eat(){ System.out.println("狗狗吃肉骨頭"); }
	
}

class Cat extends Animal {
	void cry() {
		System.out.println("貓咪喵喵叫");
	}
	void eat() {
		System.out.println("貓咪吃魚");
	}
}
//-----------------------------------
class Food {
	void showName() {
		System.out.println("雜食");
	}
}

class Fish extends Food {
	void showName() {
		System.out.println("魚");
	}
}

class Bone extends Food {	
	 void showName(){ System.out.println("肉骨頭"); }	 
}

子類
程式碼

package Extends;

public class MasterPoly {

	public static void main(String[] args) {
		//多型基本用法:方法的使用
				//多型語法=> 父類型  變數名 = new 子類型();
				//左:變數類型,有限制意思,限制子類物件只能使用父類型有定義的名稱,包括屬性(值)/方法
				//右:實際操作的記憶體
				
				Animal a1 = new Dog();
				//Animal若沒有定義cry(),則a1物件無法呼叫
				//若可執行,則會執行子類物件的方法內容
				a1.cry();
				//多型語法在操作屬性時,會使用左邊父類的屬性與值
				System.out.println(a1.a);
				
//				Food f1 = new Fish();
//				f1.showName();
				
			}
		}

顯示
https://ithelp.ithome.com.tw/upload/images/20231018/20119035IzzTymde99.png


解釋程式碼
這段Java程式碼示範了繼承(Inheritance)和多態性(Polymorphism)的概念。我們來逐段解釋它:

  1. Master 類別是主類別,裡面有一個 feed 方法,用來餵食動物。這個方法接受兩個參數,Animal a 和 Food f,代表要餵食的動物和食物。

  2. 在 feed 方法中,使用 instanceof 運算符來比對傳入的 a 參數的類型。如果 a 是 Animal 的實例,就執行相對應的動作。如果是 Dog,則給狗狗餵食骨頭;如果是 Cat,則給貓咪餵食魚。

  3. Animal 類別是基礎類別,它有一個 cry 方法和一個 eat 方法。所有的動物都有 cry 方法,但 eat 方法是一個通用的實作,顯示 "動物吃肉"。

  4. Dog 和 Cat 類別是 Animal 類別的子類別,它們繼承了 Animal 類別的特性,但也覆寫了 cry 和 eat 方法。狗狗的 cry 方法顯示 "狗狗汪汪叫",並且覆寫了 eat 方法以顯示 "狗狗吃肉骨頭",而貓咪的 cry 方法顯示 "貓咪喵喵叫",並且覆寫了 eat 方法以顯示 "貓咪吃魚"。

  5. Food 類別是食物的基礎類別,有一個 showName 方法,顯示 "雜食"。

  6. Fish 和 Bone 類別是 Food 類別的子類別,它們覆寫了 showName 方法,分別顯示 "魚" 和 "肉骨頭"。

總結來說,這段程式碼示範了物件導向編程中的繼承和多態性概念。不同類別的物件可以共用相同的方法名稱,但根據其實際的類別,執行不同的行為。在 feed 方法中,根據傳入的動物類別,選擇適當的食物來餵食。
/images/emoticon/emoticon08.gif
這個Java程式碼示範了多態性的基本概念。讓我們逐段解釋它:

  1. 在 MasterPoly 類別的 main 方法中,我們看到多態性的使用範例。

  2. 以下這行程式碼:

    Animal a1 = new Dog();
    

    這表示我們創建了一個 Animal 類別的參考變數 a1,但我們實際上將它指向了一個 Dog 類別的物件。這就是多態性的一個重要特性,你可以使用父類別的參考變數來引用子類別的物件。

  3. 接下來,我們呼叫 a1.cry() 方法,即使 cry 方法是在 Animal 類別中定義的,但實際上執行的是 Dog 類別中覆寫(override)的 cry 方法。這是多態性的另一個示範,方法的執行取決於實際物件的類別。

  4. 最後,我們使用 System.out.println(a1.a) 來訪問 a1 的 a 屬性。注意,a 是在 Animal 類別中定義的,但即使我們將 a1 指向了一個 Dog 物件,它仍然訪問到的是 Animal 類別中的 a 屬性值。多態性在操作屬性時使用的是參考變數的類別中的屬性值。

總結來說,這段程式碼示範了多態性的核心概念,允許你使用父類別的參考變數來操作子類別的物件,並且在運行時決定實際執行的方法。

/images/emoticon/emoticon08.gif

謝謝收看/images/emoticon/emoticon41.gif


上一篇
解釋從底開始~JAVA程式碼~
下一篇
JAVA程式碼~HashSet
系列文
自己開發一個~? 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言